package com.zenithmind.chat.pojo.vo;

import lombok.Data;

import java.time.LocalDateTime;

/**
 * 私聊消息VO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
public class ChatPrivateMessageVO {

    /**
     * 消息ID
     */
    private String id;

    /**
     * 会话ID
     */
    private String sessionId;

    /**
     * 发送者ID
     */
    private String senderId;

    /**
     * 发送者姓名
     */
    private String senderName;

    /**
     * 发送者头像
     */
    private String senderAvatar;

    /**
     * 接收者ID
     */
    private String receiverId;

    /**
     * 接收者姓名
     */
    private String receiverName;

    /**
     * 消息类型（1-文本，2-图片，3-文件，4-语音，5-视频，6-系统消息，7-表情，8-链接）
     */
    private Integer messageType;

    /**
     * 消息类型文本
     */
    private String messageTypeText;

    /**
     * 消息内容
     */
    private String content;

    /**
     * 媒体文件URL
     */
    private String mediaUrl;

    /**
     * 媒体文件大小（字节）
     */
    private Long mediaSize;

    /**
     * 媒体文件大小文本
     */
    private String mediaSizeText;

    /**
     * 媒体文件时长（秒）
     */
    private Integer mediaDuration;

    /**
     * 媒体文件时长文本
     */
    private String mediaDurationText;

    /**
     * 缩略图URL
     */
    private String thumbnailUrl;

    /**
     * 回复的消息ID
     */
    private String replyToId;

    /**
     * 回复的消息内容
     */
    private String replyToContent;

    /**
     * 消息状态（1-正常，2-已撤回，3-已删除）
     */
    private Integer status;

    /**
     * 消息状态文本
     */
    private String statusText;

    /**
     * 撤回时间
     */
    private LocalDateTime recallTime;

    /**
     * 撤回原因
     */
    private String recallReason;

    /**
     * 是否已读
     */
    private Boolean isRead;

    /**
     * 已读时间
     */
    private LocalDateTime readTime;

    /**
     * 客户端消息ID
     */
    private String clientMsgId;

    /**
     * 发送时间
     */
    private LocalDateTime sendTime;

    /**
     * 发送时间文本（相对时间）
     */
    private String sendTimeText;

    /**
     * 是否可以撤回（发送后2分钟内）
     */
    private Boolean canRecall;

    /**
     * 是否为当前用户发送
     */
    private Boolean isSelf;

    /**
     * 扩展信息
     */
    private Object extraInfo;
}
